import subprocess
import os

def accelerate_video(input_path, speed):
    """
    加速视频和音频，并保存到当前目录，文件名为源文件名后加"倍速版"。

    参数:
    input_path (str): 输入视频文件的路径。
    speed (float): 视频加速的倍速。例如，2.0表示加速到原来的2倍速度。
    """
    # 处理输入路径
    input_path = input_path.replace('/', '\\')  # 处理单斜杠为双斜杠
    base_name = os.path.basename(input_path)  # 获取文件名
    name, ext = os.path.splitext(base_name)  # 分离文件名和扩展名

    # 构造默认输出文件名
    # output_base = f"{name}_speed{ext}"
    # output_path = f"./{output_base}"
    
    # # 检查文件是否已存在，如果存在则在文件名后加上自增数字
    # counter = 1
    # while os.path.exists(output_path):
    #     output_base = f"{name}_speed_{counter}{ext}"
    #     output_path = f"./{output_base}"
    #     counter += 1
    
    output_path = f"{name}_{speed}{ext}"

    # 构造ffmpeg命令
    command = [
        'ffmpeg',
        '-i', input_path,  # 输入文件
        '-filter_complex', f'[0:v]setpts={1.0/speed}*PTS[v];[0:a]atempo={speed}[a]',  # 同时加速视频和音频
        '-map', '[v]',  # 映射处理后的视频
        '-map', '[a]',  # 映射处理后的音频
        '-b:v', '1000k',  # 设置视频比特率以减小文件大小（可根据需要调整）
        '-preset', 'medium',  # 设置编码速度
        '-crf', '23',  # 设置恒定质量，数值越小质量越高
        output_path  # 输出文件
    ]

    # 执行ffmpeg命令
    subprocess.run(command, check=True)
    print(f"视频已成功加速并保存到 {output_path}")

if __name__ == "__main__":
    # 用户输入
    input_video = input("请输入输入视频文件的路径: ")
    speed_factor = float(input("请输入加速倍速（例如，2.0表示加速到原来的2倍速度）: "))

    # 调用加速函数
    accelerate_video(input_video, speed_factor) 